package 中等.贪心思想;

import java.util.ArrayList;
import java.util.List;

/**
 * 给你一个整数 finalSum 。请你将它拆分成若干个 互不相同 的正偶数之和，
 * 且拆分出来的正偶数数目 最多 。
 * 比方说，给你 finalSum = 12 ，那么这些拆分是 符合要求 的（互不相同
 * 的正偶数且和为 finalSum）：(2 + 10) ，(2 + 4 + 6) 和 (4 + 8) 。
 * 它们中，(2 + 4 + 6) 包含最多数目的整数。注意 finalSum 不能拆分成
 *  (2 + 2 + 4 + 4) ，因为拆分出来的整数必须互不相同。
 * 请你返回一个整数数组，表示将整数拆分成 最多 数目的正偶数数组。如果
 * 没有办法将 finalSum 进行拆分，请你返回一个 空 数组。你可以按 任意
 * 顺序返回这些整数。
 * <p>
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode.cn/problems/maximum-split-of-positive-even-integers
 */
public class 拆分成最多数目的正偶数之和_2178 {

    public static void main(String[] args) {

        System.out.println(maximumEvenSplit(28));

    }

    /**
     * 贪心+枚举
     * 如果是奇数，直接返回空数组
     * 如果是偶数，想要拆分尽可能多的正偶数，还不能重复，那么从 2
     * 开始枚举，每次 + 2 ，finalSum - num ，直到 finalSum < num
     * 将 finalSum 加到 list 的最后一个数上
     */
    public static List<Long> maximumEvenSplit(long finalSum) {
        List<Long> list = new ArrayList<>();
        if (finalSum % 2 == 1) {
            return list;
        }
        Long num = 2l;
        while (finalSum > 0) {
            if (finalSum < num) {
                list.set(list.size() - 1, list.get(list.size() - 1) + finalSum);
                break;
            }

            list.add(num);
            finalSum -= num;
            num += 2;
        }
        return list;
    }

}
